﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Kaskelot.SP.Model.Client.Forms;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Microsoft.SharePoint;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientValdistriktExtensions
	{
		public static ClientValdistrikt ToClientContract(this Valdistrikt entity)
		{
			ClientValdistrikt b = new ClientValdistrikt();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientValdistrikt ToMinimalClientContract(this Valdistrikt entity)
		{
			ClientValdistrikt b = new ClientValdistrikt();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static Valdistrikt ToContract(this ClientValdistrikt b)
		{
			Valdistrikt entity = new Valdistrikt();

			CopyToEntity(b, entity);

			return entity;
		}

		public static Valdistrikt UpdateContract(this Valdistrikt valdistrikt, ValdistriktForm form)
		{
			if (valdistrikt.Id == Guid.Empty)
			{
				valdistrikt.Id = Guid.NewGuid();
			}
			valdistrikt.Namn = form.Namn;
			valdistrikt.ForsamlingId = new Guid(form.ForsamlingId);
			valdistrikt.ValdistriktNr = form.ValdistriktNr;
			valdistrikt.Andrad = DateTime.Now;
			valdistrikt.AndradAv = SPContext.Current.Web.CurrentUser.Name;

			return valdistrikt;
		}

		private static void CopyFromEntity(Valdistrikt from, ClientValdistrikt to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Namn = from.Namn;
			to.ForsamlingId = from.ForsamlingId;
			to.ForsamlingNamn = from.Forsamling.Namn;

			to.Andrad = from.Andrad != null ? from.Andrad.ToString() : null;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad != null ? from.Skapad.ToString() : null;
			to.SkapadAv = from.SkapadAv;

			to.BemanningKlar = from.BemanningKlar;
			to.ValdistriktNr = from.ValdistriktNr;

			if (minimal) return;
			to.Forsamling = from.Forsamling.ToMinimalClientContract();
		}

		private static void CopyToEntity(ClientValdistrikt from, Valdistrikt to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Namn = from.Namn;

			if (!String.IsNullOrEmpty(from.Andrad))
				to.Andrad = DateTime.Parse(from.Andrad);
			else
				to.Andrad = null;

			to.AndradAv = from.AndradAv;

			if (from.Skapad != null)
				to.Skapad = DateTime.Parse(from.Skapad);

			to.BemanningKlar = from.BemanningKlar;
			to.ValdistriktNr = from.ValdistriktNr;

			to.ForsamlingId = from.ForsamlingId;
		}
	}
}
